package com.chapter17.demo2;

public class SleepThread {
    public static void main(String[] args) {
        //Runnable接口只有一个方法，于是在Java 8中使用@FunctionalInterface注解将该接口标记为函数式接口，
        //我们可以使用Lambda表达式来简化该接口的实现(创建Runnable对象并实现run方法)
        Runnable task=()->{
            for(int i=0;i<5;i++){
                System.out.println(Thread.currentThread().getName()+":"+i);
            }
        };


        //创建了一个线程对象，并启动它（把运行task任务的线程加入到了这个列表中）。
        //然后调用Thread类的sleep方法让主线程睡眠1秒钟，让刚创建的（子）线程有充分的运行机会。
        //在睡眠时间到了后，主线程恢复运行，执行循环代码
        new Thread(task).start();

        try {
            //与yield方法临时放弃线程执行权利的方式不同，sleep是让线程真正“睡眠”，
            // 在正常情况下，需要等线程“睡够了”指定时间，才会重新转为可运行状态，被线程调度器所调度。
            Thread.sleep(1000);
        }catch (InterruptedException e){
            //sleep方法声明了抛出InterruptedException，这个异常是一个checked异常，所以我们对该异常进行了捕获。
            e.printStackTrace();
        }

        //主线程
        for (int i=0;i<5;i++){
            System.out.println(Thread.currentThread().getName()+":"+i);
        }
    }
}
